package cpsobras.movimento;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.ForeignKey;

import cpsobras.fornecedor.Fornecedor;
import cpsobras.movimento_item.Movimento_Item;
import cpsobras.obra.Obra;


@Entity
@Table(name="tab_movimento")
public class Movimento implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	private Integer cod_movime;
	private String cod_docume;
	private String cod_serie_docume;
	private String ide_movime;
	private String ide_tipo_docume;
	@Temporal(TemporalType.DATE)
	private Date dat_movime;
	private Double val_total_docume;

	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name="cod_movime")
	@ForeignKey(name="cod_movime")
	private List<Movimento_Item> movimento_item;

	@ManyToOne
	@JoinColumn(name="cod_pessoa", insertable=false, updatable=false)
	private Fornecedor fornecedor;
	
	@ManyToOne
	@JoinColumn(name="cod_obra", insertable=false, updatable=false)
	private Obra obra;

	private Integer cod_obra;
	private Integer cod_pessoa;
	
	public Integer getCod_movime() {
		return cod_movime;
	}
	public void setCod_movime(Integer cod_movime) {
		this.cod_movime = cod_movime;
	}
	public String getCod_docume() {
		return cod_docume;
	}
	public void setCod_docume(String cod_docume) {
		this.cod_docume = cod_docume;
	}
	public String getCod_serie_docume() {
		return cod_serie_docume;
	}
	public void setCod_serie_docume(String cod_serie_docume) {
		this.cod_serie_docume = cod_serie_docume;
	}
	public String getIde_movime() {
		return ide_movime;
	}
	public void setIde_movime(String ide_movime) {
		this.ide_movime = ide_movime;
	}
	public String getIde_tipo_docume() {
		return ide_tipo_docume;
	}
	public void setIde_tipo_docume(String ide_tipo_docume) {
		this.ide_tipo_docume = ide_tipo_docume;
	}
	public Date getDat_movime() {
		return dat_movime;
	}
	public void setDat_movime(Date dat_movime) {
		this.dat_movime = dat_movime;
	}
	public Double getVal_total_docume() {
		return val_total_docume;
	}
	public void setVal_total_docume(Double val_total_docume) {
		this.val_total_docume = val_total_docume;
	}
	public List<Movimento_Item> getMovimento_item() {
		return movimento_item;
	}
	public void setMovimento_item(List<Movimento_Item> movimento_item) {
		this.movimento_item = movimento_item;
	}
	public Fornecedor getFornecedor() {
		return fornecedor;
	}
	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}
	public Obra getObra() {
		return obra;
	}
	public void setObra(Obra obra) {
		this.obra = obra;
	}
	public Integer getCod_obra() {
		return cod_obra;
	}
	public void setCod_obra(Integer cod_obra) {
		this.cod_obra = cod_obra;
	}
	public Integer getCod_pessoa() {
		return cod_pessoa;
	}
	public void setCod_pessoa(Integer cod_pessoa) {
		this.cod_pessoa = cod_pessoa;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((cod_docume == null) ? 0 : cod_docume.hashCode());
		result = prime * result
				+ ((cod_movime == null) ? 0 : cod_movime.hashCode());
		result = prime * result
				+ ((cod_obra == null) ? 0 : cod_obra.hashCode());
		result = prime * result
				+ ((cod_pessoa == null) ? 0 : cod_pessoa.hashCode());
		result = prime
				* result
				+ ((cod_serie_docume == null) ? 0 : cod_serie_docume.hashCode());
		result = prime * result
				+ ((dat_movime == null) ? 0 : dat_movime.hashCode());
		result = prime * result
				+ ((fornecedor == null) ? 0 : fornecedor.hashCode());
		result = prime * result
				+ ((ide_movime == null) ? 0 : ide_movime.hashCode());
		result = prime * result
				+ ((ide_tipo_docume == null) ? 0 : ide_tipo_docume.hashCode());
		result = prime * result
				+ ((movimento_item == null) ? 0 : movimento_item.hashCode());
		result = prime * result + ((obra == null) ? 0 : obra.hashCode());
		result = prime
				* result
				+ ((val_total_docume == null) ? 0 : val_total_docume.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Movimento other = (Movimento) obj;
		if (cod_docume == null) {
			if (other.cod_docume != null)
				return false;
		} else if (!cod_docume.equals(other.cod_docume))
			return false;
		if (cod_movime == null) {
			if (other.cod_movime != null)
				return false;
		} else if (!cod_movime.equals(other.cod_movime))
			return false;
		if (cod_obra == null) {
			if (other.cod_obra != null)
				return false;
		} else if (!cod_obra.equals(other.cod_obra))
			return false;
		if (cod_pessoa == null) {
			if (other.cod_pessoa != null)
				return false;
		} else if (!cod_pessoa.equals(other.cod_pessoa))
			return false;
		if (cod_serie_docume == null) {
			if (other.cod_serie_docume != null)
				return false;
		} else if (!cod_serie_docume.equals(other.cod_serie_docume))
			return false;
		if (dat_movime == null) {
			if (other.dat_movime != null)
				return false;
		} else if (!dat_movime.equals(other.dat_movime))
			return false;
		if (fornecedor == null) {
			if (other.fornecedor != null)
				return false;
		} else if (!fornecedor.equals(other.fornecedor))
			return false;
		if (ide_movime == null) {
			if (other.ide_movime != null)
				return false;
		} else if (!ide_movime.equals(other.ide_movime))
			return false;
		if (ide_tipo_docume == null) {
			if (other.ide_tipo_docume != null)
				return false;
		} else if (!ide_tipo_docume.equals(other.ide_tipo_docume))
			return false;
		if (movimento_item == null) {
			if (other.movimento_item != null)
				return false;
		} else if (!movimento_item.equals(other.movimento_item))
			return false;
		if (obra == null) {
			if (other.obra != null)
				return false;
		} else if (!obra.equals(other.obra))
			return false;
		if (val_total_docume == null) {
			if (other.val_total_docume != null)
				return false;
		} else if (!val_total_docume.equals(other.val_total_docume))
			return false;
		return true;
	}
}
